草庐IT

Lua 迭代器

全部标签

windows - 在不使用 FindFirstFile 的情况下迭代目录中的文件

在Windows操作系统上,如何在不使用第三方库或不使用FindFirstFile、FindNextFile等的情况下迭代给定目录下的文件? 最佳答案 鉴于FindFirstFile是Windows中的主要文件枚举方法,您还希望得到什么?有NTAPI函数(ZwQueryDirectoryFile和类似函数)由FindFirstFile调用,但它们更复杂并且没有提供真正的好处。 关于windows-在不使用FindFirstFile的情况下迭代目录中的文件,我们在StackOverflow

windows - 为什么 LUA_PATH 包含一个爆炸 (!) 在 Windows 上损坏?

我有一个文件main.lua:require("hello")还有一个文件hello.lua在目录foobar!baz(包含!):module(...,package.seeall)print("hellofromhello.lua")当我(在Windows上)将环境变量LUA_PATH设置为目录时:setLUA_PATH="C:\Programme\Lua\5.1\foobar!baz\?.lua"我得到一个奇怪的错误:C:\Programme\Lua\5.1>luamain.lualua:main.lua:4:module'hello'notfound:nofieldpackage

c# - 将零分配给变量是否可能比具有一百万次迭代的 For 循环花费更多时间?

由于分析我的代码,我得到了一个奇怪的输出。对于代码的主要计算,它正确地表明超过70%的时间花在了这些部分上,但还有其他一些有趣的地方。下面一行占用%5.8intcounter=0;//%5.8oftotaltime而且下面的For循环耗时更少(nx=800&ny=800)!这怎么可能?附加了探查器结果的图片。 最佳答案 更好的测试方法是附加分析器,但先不要启动它。(这看起来像我知道会执行此操作的VS探查器。)运行代码,然后启动探查器并再次运行(或多次)。这将使您更好地了解代码的作用(除非您正在尝试衡量启动性能)。

c# - 如何在 C# 5.0 应用程序中嵌入 lua(或其他脚本语言)

首先,我想提前为我的英语申请。我的问题具体是关于在C#应用程序中我需要具备什么才能解释提供给所述应用程序的Lua脚本。Lua脚本必须能够访问用C#编写的类。在搜索堆栈溢出的答案后,我认为处理这个主题的问题已经过时(我认为在动态语言运行时成为.NETFramework的一部分之前就有人问过这些问题,我认为现在事情变得更简单了我们有DLR)。基本上,我想做的就是这个TypeThatExecutesLua.MethodToLoadLuaScript(script.lua);TypeThatExecutesLua.Execute();现在,假设我们不关心script.lua返回什么。但是在某些

c# - 防止 Lua 死循环

我使用lua接口(interface)在我的C#程序中获得lua支持,如果用户提交这样的代码,工作线程将卡住whiletruedoend我有一种方法可以检测无限循环是否正在运行,但我需要一种从工作线程退出DoString方法的好方法。有什么想法吗?编辑:@kikito,是的,我正在检测类似的东西。我遇到的问题是我找不到一种干净的方法来终止DoString方法,看起来Lua接口(interface)主类(Lua)有一些静态依赖性,因为如果我这样做lua.Close();在我的实例中,它会中止DoString方法,但下次我实例化一个lua类时newLua();它会崩溃,说一些关于保护内存的

c# - 是否可以克隆 IEnumerable<T> 实例,保存迭代状态的副本?

我想创建一个IEnumerator的副本这样我就可以从集合中的特定位置重新启动枚举过程。显然,对于实现IList的集合这样做没有任何好处。,因为我们可以记住感兴趣的索引。有没有一种聪明的方法可以使用yield的组合来完成这个任务?语句和Linq函数?我找不到合适的Clone()复制枚举器的方法,并希望避免使用Enumerable.Skip()将新的枚举器重新定位到所需的恢复点。此外,我希望解决方案尽可能通用,而不必依赖于任何具体集合的状态。 最佳答案 你能做的最好的事情就是写一些东西来保留一个缓冲区(可能是一个Queue)从一个而不

c# - Parallel.For 在大约 1370 次迭代后卡住,不知道为什么

我正在对7500多个对象运行Parallel.For循环。在那个for循环中,我对每个对象做了很多事情,特别是调用两个Web服务和两个内部方法。Web服务只是检查对象、处理并返回一个字符串,然后我将其设置为对象的属性。两个内部方法也是如此。我没有将任何内容写入磁盘或从磁盘读取。我还使用标签和进度条更新了winforms应用程序中的UI,让用户知道它的位置。这是代码:vartask=Task.Factory.StartNew(()=>{Parallel.For(0,upperLimit,(i,loopState)=>{if(cancellationToken.IsCancellation

c# - foreach 怎么知道迭代集合被修改了呢?

当我修改使用foreach循环访问的集合时,出现异常。所以我很好奇foreach(或运行时)如何检测到它。是否可以用一般对象这样做? 最佳答案 集合本身必须检测它。在标准库集合中,这是通过拥有一个内部版本号来实现的,该版本号由每个操作修改,并在每次迭代时由迭代器检查(即每次调用MoveNext它检查版本号与创建迭代器时相同。 关于c#-foreach怎么知道迭代集合被修改了呢?,我们在StackOverflow上找到一个类似的问题: https://stack

c# - Linq 在单次迭代中选择和聚合

有没有办法用linq做到这一点而不用枚举fooCollection两次?varfooCollection=//getfoovarselectedIds=newList();varaggregateContent=String.Empty;foreach(varfinfoo){selectedIds.Add(foo.Id);aggregateContent+=foo.Content}varresults=newFooResults{Content=aggregateContent,SelectedIds=selectedIds};returnresults;

c# - 在迭代列表时从列表中删除/添加项目

首先,我知道由于显而易见的原因,这是不可能开箱即用的。foreach(stringiteminmyListOfStrings){myListOfStrings.Remove(item);}上面的片段是我见过的最可怕的事情之一。那么,你如何实现它呢?您可以使用for向后遍历列表,但我也不喜欢这种解决方案。我想知道的是:是否有一种方法/扩展可以从当前列表中返回一个IEnumerable,类似于float副本?LINQ有很多扩展方法可以做到这一点,但您总是必须用它做一些事情,例如过滤(where,take...)。我期待这样的事情:foreach(stringiteminmyListOfSt